package com.demo.java.OD501_550.OD517;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【Wonderland游乐园(C卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146482489
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int[] costs = split(in.nextLine(), " ");  // 读取票价
        int[] days = split(in.nextLine(), " ");   // 读取出行天数

        // 初始化 DP 数组，dp[i] 表示到第 i 天的最小费用
        int[] dp = new int[400];
        for (int i = 0; i < 400; i++) {
            dp[i] = Integer.MAX_VALUE;  // 初始化为最大值
        }
        dp[0] = 0;  // 第0天费用为0

        int j = 0;
        for (int i = 1; i <= 365; i++) {
            if (j < days.length && i == days[j]) {  // 如果是出行日
                // 对比不同票价，选择最便宜的
                dp[i] = Math.min(dp[i], dp[Math.max(0, i - 1)] + costs[0]);  // 1天票
                dp[i] = Math.min(dp[i], dp[Math.max(0, i - 3)] + costs[1]);  // 3天票
                dp[i] = Math.min(dp[i], dp[Math.max(0, i - 7)] + costs[2]);  // 7天票
                dp[i] = Math.min(dp[i], dp[Math.max(0, i - 30)] + costs[3]); // 30天票
                j += 1;  // 处理下一个出行日期
            } else {
                dp[i] = dp[i - 1];  // 如果不是出行日，费用等于前一天的费用
            }
        }

        System.out.println(dp[365]);  // 输出最后一天的最小费用
    }

    // 处理输入字符串，将其转为整型数组
    public static int[] split(String input_str, String chars) {
        String[] tmp2 = input_str.split(chars);
        int[] counts = new int[tmp2.length];
        for (int i = 0; i < tmp2.length; i++) {
            counts[i] = Integer.parseInt(tmp2[i]);
        }
        return counts;
    }
}